package com.example.propertymanagement.entity;

import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * Community：与数据库中community表对应的实体类，包含多个管理员
 */
@Entity
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)  // 仅返回非空字段
public class Community {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;  // 小区ID

    private String communityCode;  // 小区编号
    private String communityName;  // 小区名称
    private String address;  // 小区地址
    private Double area;  // 小区占地面积
    private Integer totalBuildings;  // 小区总栋数
    private Integer totalHouseholds;  // 小区总户数
    private Double greeningRate;  // 绿化率
    private String thumbnail;  // 小区缩略图路径
    private String developer;  // 开发商名称

    @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")  // 自动填充当前时间戳
    private Date createTime;  // 小区创建时间，使用 LocalDateTime 替代 Date 类型

    @Convert(converter = CommunityStatusConverter.class)  // 使用自定义的转换器
    private CommunityStatus status;  // 小区状态（启用、禁用）

    @ManyToMany  // 多对多关联：一个小区可以有多个管理员
    @JoinTable(
            name = "community_admin",  // 中间表名
            joinColumns = @JoinColumn(name = "community_id"),  // 当前表的关联字段
            inverseJoinColumns = @JoinColumn(name = "admin_id")  // 对方表的关联字段
    )
    @JsonIgnoreProperties({"communities", "admins"})
    private List<AdminUser> admins;  // 管理员列表

    @OneToMany(mappedBy = "community")  // 一对多关系：一个小区可以有多个楼栋
    @JsonIgnoreProperties({"community", "admins", "buildings"})
    private List<Building> buildings;  // 楼栋列表
}